﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Net;
using System.Text;

namespace CoreInmobiliario.Frontend
{
    public partial class Publicacion : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetPublicacion();
                popupMensaje.SetTitulo("Consulta");
                popupMensaje.SetIcon(HelperClasses.Parameters.OK_ICON);
                popupMensaje.SetMessage("Su consulta fue enviada correctamente. En momentos nos pondremos en contacto con usted.");
            }
        }

        /// <summary>
        /// Obtenemos los datos de la publicación y mostramos en pantalla
        /// </summary>
        public void GetPublicacion()
        {
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(GetPublicacionIdQueryString());
            if (publicacion != null)
            {
                lblTituloPublicacion.Text = publicacion.Operacion.Nombre + " - " + publicacion.Propiedad.Calle + " y " + publicacion.Propiedad.Interseccion + " - " + publicacion.Propiedad.Localidad.Nombre;
                lblSuperficie.Text = publicacion.Propiedad.Superficie.ToString();
                lblMetros.Text = publicacion.Propiedad.MetrosCubiertos.ToString();
                lblEstado.Text = publicacion.Propiedad.Estado;
                lblDormitorios.Text = publicacion.Propiedad.Dormitorios.ToString();
                lblBanos.Text = publicacion.Propiedad.Banio.ToString();
                lblAntiguedad.Text = publicacion.Propiedad.Antiguedad;
                lblAmbientes.Text = publicacion.Propiedad.Ambientes.ToString();
                if (publicacion.OperacionId == 1)
                    lblPrecio.Text = publicacion.PrecioVenta == null || publicacion.PrecioVenta == 0 ? " - " : publicacion.Moneda1.Signo + publicacion.PrecioVenta.ToString();
                else if (publicacion.OperacionId == 2)
                    lblPrecio.Text = publicacion.PrecioAlquiler == null || publicacion.PrecioAlquiler == 0 ? " - " : publicacion.Moneda.Signo + publicacion.PrecioAlquiler.ToString();
                else
                    lblPrecio.Text = publicacion.Moneda1.Signo + publicacion.PrecioVenta.ToString() + " - " + publicacion.Moneda.Signo + publicacion.PrecioAlquiler.ToString();

                if (publicacion.Requisitos != "")
                    lblRequisitos.Text = publicacion.Requisitos;
                else
                    divRequisitos.Visible = false;

                lblDescripcion.Text = publicacion.Propiedad.Descripcion;

                hiddenAddress.Value = publicacion.Propiedad.Calle;
                hiddenNumber.Value = publicacion.Propiedad.Numero;
                hiddenLocalidad.Value = publicacion.Propiedad.Localidad.Nombre;
                hiddenPublicacionId.Value = publicacion.PublicacionId.ToString();
            }
            else
                Response.Redirect("Buscador.aspx");
        }

        public string[] GetCaracteristicas()
        {
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(GetPublicacionIdQueryString());
            List<Data.Caracteristica> list = Business.Caracteristica.GetInstance().GetListCaracteristicaByPropiedadId(publicacion.PropiedadId);
            string[] caracteristicas = new string[list.Count];

            for(int i = 0; i < list.Count; i++)
            {
                caracteristicas[i] = list[i].Nombre;
            }

            return caracteristicas;
        }

        public string[] GetServicios()
        {
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(GetPublicacionIdQueryString());
            List<Data.Servicio> list = Business.Servicio.GetInstance().GetListServicioByPropiedadId(publicacion.PropiedadId);
            string[] servicios = new string[list.Count];

            for (int i = 0; i < list.Count; i++)
            {
                servicios[i] = list[i].Nombre;
            }

            return servicios;
        }

        /// <summary>
        /// Si hay imagenes subidas, devuelve el path de la 1ra para visualizar como portada
        /// </summary>
        /// <returns></returns>
        public string GetImagenPortada()
        {
            try
            {
                Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(GetPublicacionIdQueryString());
                string[] filesImages = System.IO.Directory.GetFiles(MapPathSecure(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + publicacion.PropiedadId.ToString() + "/"));

                if (filesImages.Length > 0)
                {
                    filesImages[0] = filesImages[0].Replace("\\","/");
                    string[] subDirectory = filesImages[0].Split(char.Parse("/"));

                    string pathImagePortada = HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + publicacion.PropiedadId.ToString() + "/" + subDirectory[subDirectory.Length - 1];

                    return pathImagePortada.Substring(2);
                }
                else
                    return "Images/Style/sin_foto.jpg";
            }
            catch (Exception ex)
            { return "Images/Style/sin_foto.jpg"; }
        }

        /// <summary>
        /// Devuelve un string[] con los path de las otras imagenes de la propiedad si existieran
        /// </summary>
        /// <returns></returns>
        public string[] GetOtrasImagenes()
        {
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(GetPublicacionIdQueryString());
            string[] filesImages = System.IO.Directory.GetFiles(MapPathSecure(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + publicacion.PropiedadId.ToString() + "/"));

            if (filesImages.Length > 1)
            {
                string[] images = new string[filesImages.Length - 1];

                for (int i = 0; i < filesImages.Length; i++)
                {
                    if (i != 0)
                    {
                        images[i - 1] = filesImages[i].Replace("\\", "/");
                        string[] subDirectory = images[i - 1].Split(char.Parse("/"));

                        images[i - 1] = HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + publicacion.PropiedadId.ToString() + "/" + subDirectory[subDirectory.Length - 1];
                        images[i - 1] = images[i - 1].Substring(2);
                    }
                }

                return images;
            }
            else
                return null;
        }

        public int GetPublicacionIdQueryString()
        {
            try
            {
                return Int32.Parse(Request.QueryString["id"]);
            }
            catch
            {
                Response.Redirect("Buscador.aspx");
                return 0;
            }
        }

        protected void btnPdf_Click(object sender, ImageClickEventArgs e)
        {
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(GetPublicacionIdQueryString());
            //Exporta Publicacion a PDF
            string path = Server.MapPath("PDF/" + publicacion.Propiedad.PropiedadId + "_" + publicacion.Propiedad.Calle + "_" + publicacion.Propiedad.Numero + "_(Nuevo Espacio).pdf");
            string pathImageHeader = Server.MapPath("Images/Style/logoHeaderPdf.png");
            HelperClasses.ExportTo.ExportarPublicacionPDF(publicacion.PublicacionId, path, pathImageHeader);

            //Download PDF
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
            this.Response.Clear();
            this.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
            this.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            this.Response.ContentType = "application/octet-stream";
            this.Response.WriteFile(fileInfo.FullName);
            this.Response.End();
        }

        public string GetBodyMsj()
        {
            string body = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" +
                           "<head runat=\"server\">" +
                           "     <title>Consulta - NE Propiedades</title>" +
                           "     <style>" +
                           "         .body " +
                           "         {" +
                           "             background-color: #333333;" +
                           "             background-repeat: repeat;" +
                           "             margin: 0;" +
                           "             color: #333333;" +
                           "             font-family: Calibri;" +
                           "             font-size:13px;" +
                           "         }" +

                           "         #LoginBackground" +
                           "         {" +
                           "             background-color: #333333 scroll 0 0 transparent;" +
                           "             position: absolute;" +
                           "             top: 26%;" +
                           "             width: 100%;" +
                           "             bottom: 0;" +
                           "         }" +

                           "         #LoginForm" +
                           "         {" +
                           "             background-color: #FFFFFF;" +
                           "             border:1px solid #E5E5E5;" +
                           "             width:400px;" +
                           "             height: 200px;" +
                           "             padding: 4px;" +
                           "             -webkit-border-radius: 10px;" +
                           "             -moz-border-radius: 10px;" +
                           "             border-radius: 10px;" +
                           "             -khtml-border-radius: 10px;" +
                           "             margin-left: auto;" +
                           "             margin-right: auto;" +
                           "         }" +

                           "         #imgHeaderLogin" +
                           "         {" +
                           "             -webkit-border-radius: 10px;" +
                           "             -moz-border-radius: 10px;" +
                           "             border-radius: 10px;" +
                           "             -khtml-border-radius: 10px;" +
                           "         }" +
                           "     </style>" +
                           " </head>" +
                           " <body class=\"body\">" +
                           "     <div id=\"LoginBackground\">" +
                           "             <div id=\"LoginForm\"> " +
                           "             <h2>Consulta desde NUEVO ESPACIO Propiedades</h2>" +
                           "             El Sr. /Sra. <strong>" + txtNombreApellidoConsulta.Text + "</strong> realizó la siguiente consulta:<br /><br />" + txtMensajeConsulta.Text + "<br /><br />" +
                           "             <b>Contacto:</b>" +
                           "             <br />E-mail: " + txtEmailConsulta.Text +
                           "             <br />Tel: " + txtTelefonoConsulta.Text +
                           "         </div>" +
                           "     </div>" +
                           " </body>" +
                           "</html>";
            return body;
        }

        protected void btnEnviarConsulta_Click(object sender, EventArgs e)
        {
            MailMessage objEmail = new MailMessage();
            //Remitente
            objEmail.From = new MailAddress(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.CONTACTO_EMAIL));

            //Email del contacto. Al presionar "Responder" en la casilla, el email será para la dirección seteada
            objEmail.ReplyTo = new MailAddress(txtEmailConsulta.Text);

            //Dirección a donde se envia el correo
            objEmail.To.Add(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.DESTINO_NOTIFICACION_EMAIL));
            if (HelperClasses.Utils.GetConfig(HelperClasses.Parameters.DESTINO_NOTIFICACION_EMAIL2) != "")
                objEmail.To.Add(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.DESTINO_NOTIFICACION_EMAIL2));

            //Prioridad
            objEmail.Priority = MailPriority.Normal;

            //Habilitamos el HTML
            objEmail.IsBodyHtml = true;

            //Asunto
            objEmail.Subject = "Consulta Publicación: " + hiddenAddress.Value + " Nº" + hiddenNumber.Value + " " + hiddenLocalidad.Value;

            //Cuerpo del email
            objEmail.Body = GetBodyMsj();

            //Codificación del email
            objEmail.SubjectEncoding = Encoding.GetEncoding("ISO-8859-1");

            //Codificación del email
            objEmail.BodyEncoding = Encoding.GetEncoding("ISO-8859-1");

            //Configuración SMTP
            SmtpClient objSmtp = new SmtpClient();

            //Servidor SMTP
            objSmtp.Host = HelperClasses.Utils.GetConfig(HelperClasses.Parameters.SMTP);

            //Credenciales
            objSmtp.Credentials = new NetworkCredential(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.CONTACTO_EMAIL), HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PASSWORD_EMAIL));

            //Envio del email
            objSmtp.Send(objEmail);

            mpeMensaje.Show();
        }
    }
}